package leetcode.problems;

import java.util.Arrays;

/**
 * _0409 Remove Element
 * 移除元素
 * Created by gmwang on 2018/3/23
 */
public class _0409RemoveElement {
    /**
     * Given an array and a value, remove all instances of that value in-place and return the new length.
         Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
         The order of elements can be changed. It doesn't matter what you leave beyond the new length.
         Example:
         Given nums = [3,2,2,3], val = 3,
     Your function should return length = 2, with the first two elements of nums being 2.
         给定一个数组和一个值，删除该值的所有实例并返回新长度。
         不要为另一个数组分配额外的空间，您必须通过使用O（1）额外内存来修改输入数组来实现这一点。
         元素的顺序可以改变。你留下的新的长度并不重要。
     */
    /**
     * 思路：
     * 1. 初看这题的时候没看懂题，是操作数组，删除其元素么。
     * 2. 返回值是长度但是还要看原数组的前几位是否是符合要求。
     * 比如[3,2,2,3], val = 3,返回值是2，没问题。但是原数组应改为[2, 2, 2, 3] 必须保证前两位是2,2。
     * 3. 不是指定数字的，就把结果+1，并把这个数字赋值到数组的前result位。
     *
     * @param
     * @return
     */
    public static int removeElement(int[] nums, int val) {
        int result = 0;
        for(int x = 0;x <nums.length; x++){
            if(nums[x] != val) {
                //将移到最后一位
                nums[result++] = nums[x];
            }
        }
        return result;
    }
    public static void main(String[] args) {
        int[] nums = {3,2,2,3};
        int s = 3;
        System.out.println(removeElement(nums,s));
        System.out.println(Arrays.toString(nums));
    }
}
